package com.sx.micowell.framework.tools;


import android.text.TextUtils;

import java.math.BigDecimal;


/**
 * 计算方法
 *
 * @author arno
 */
public class CalcuUtils {

    private static CalcuUtils calcuUtils = null;

    public static CalcuUtils getInstance() {
        if (calcuUtils == null) {
            synchronized (CalcuUtils.class) {
                if (calcuUtils == null) {
                    calcuUtils = new CalcuUtils();
                }
            }
        }
        return calcuUtils;
    }


    /**
     * 加
     *
     * @param a1    加数
     * @param a2    被加数
     * @param index 保留位数
     * @return 四舍五入 保留两位小数
     */
    public BigDecimal add(BigDecimal a1, BigDecimal a2, int index) {
        return a1.add(a2).setScale(index, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 减
     *
     * @param a1    减数
     * @param a2    被减数
     * @param index 保留位数
     * @return 四舍五入 保留两位小数
     */
    public BigDecimal sub(BigDecimal a1, BigDecimal a2, int index) {
        return a1.subtract(a2).setScale(index, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 乘
     *
     * @param a1    乘数
     * @param a2    被乘数
     * @param index 保留位数
     * @return 四舍五入 保留两位小数
     */
    public BigDecimal mul(BigDecimal a1, BigDecimal a2, int index) {
        return a1.multiply(a2).setScale(index, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 乘 向下取整
     *
     * @param a1    乘数
     * @param a2    被乘数
     * @param index 保留位数
     * @return java.math.BigDecimal
     * @author leehao
     */
    public BigDecimal mulDown(BigDecimal a1, BigDecimal a2, int index) {
        return a1.multiply(a2).setScale(index, BigDecimal.ROUND_DOWN);
    }

    /**
     * 除
     *
     * @param d1    除数
     * @param d2    被除数
     * @param index 保留位数
     * @return 四舍五入 保留两位小数
     */
    public BigDecimal div(BigDecimal d1, BigDecimal d2, int index) {
        if (d2.compareTo(BigDecimal.ZERO) == 0) {
            return BigDecimal.ZERO;
        }
        return d1.divide(d2, index, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 判断两个int类型的是否相等
     *
     * @param a
     * @param b
     * @return
     */
    public boolean isEquals(Integer a, Integer b) {
        if (a == null) {
            if (b.equals(a) || b == a) {
                return true;
            }
        } else {
            if (a.equals(b) || b == a) {
                return true;
            }
        }
        return false;
    }

    /**
     * 比较两个字符串的大小
     * true a>=b
     * false a<b
     *
     * @param a 常量
     * @param b 变量
     * @return
     */
    public boolean compareTo(String a, String b) {
        if (!TextUtils.isEmpty(a) && !TextUtils.isEmpty(b)) {
            try {
                BigDecimal temp1 = new BigDecimal(a);
                BigDecimal temp2 = new BigDecimal(b);
                int compare = temp1.compareTo(temp2);
                if (compare == -1) {
                    //a<b
                    return false;
                } else if (compare == 0) {
                    //a==b
                    BigDecimal bigDecimal = new BigDecimal(0);
                    if (bigDecimal.compareTo(temp1) == 0) {
                        return false;
                    } else {
                        return true;
                    }

                } else if (compare == 1) {
                    //a>b
                    return true;
                } else if (compare > -1) {
                    //a>=b
                    return true;
                } else if (compare < 1) {
                    //a<=b
                    return false;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
        return false;
    }

}
